
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>ES里面有什么 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>ES里面有什么 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">在 Elasticsearch 中，什么是“节点 (Node)”和“集群 (Cluster)”？它们之间有什么关系？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“节点”指的是一个 Elasticsearch 实例。而“集群”是由多个节点组成的集合，旨在提供高可用性和分布式搜索能力。所有节点都需要加入同一个命名的集群才能协同工作。</div>
          </div>
          <div class="card-source">来源: 1. 节点 (Node) 和集群 (Cluster)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">Elasticsearch 中的“索引 (Index)”可以类比于关系型数据库中的什么概念？它存储的文档采用什么格式？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">索引 (Index) 是 Elasticsearch 中存储和管理文档的结构，类似于关系型数据库中的“数据库”。索引中的文档以 JSON 格式存储。</div>
          </div>
          <div class="card-source">来源: 2. 索引 (Index)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Elasticsearch 如何实现数据的分布式存储？请解释“分片 (Shard)”的概念及其两种类型。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">每个索引被划分为多个分片 (Shard)，分片是索引的基本单位，负责存储和检索文档。分片分为“主分片 (primary shard)”和“副本分片 (replica shard)”。主分片处理写入操作，而副本分片用于实现高可用性和负载均衡。</div>
          </div>
          <div class="card-source">来源: 3. 分片 (Shard)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">Elasticsearch 中最基本的信息单位是什么？其结构有何特点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档 (Document) 是 Elasticsearch 中的基本信息单位，它包含键值对。文档的结构可以灵活定义，允许动态添加字段。</div>
          </div>
          <div class="card-source">来源: 4. 文档 (Document)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">什么是“映射 (Mapping)”？它在 Elasticsearch 的索引中定义了哪些内容？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">映射 (Mapping) 定义了索引中文档的结构和数据类型。它具体规定了字段类型、使用的分词器以及索引方式等信息。</div>
          </div>
          <div class="card-source">来源: 5. 映射 (Mapping)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">除了基本的搜索功能，Elasticsearch 还提供了哪两种强大的数据分析能力？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Elasticsearch 提供了强大的查询 DSL (Domain Specific Language) 用于进行复杂的搜索操作，以及聚合 (Aggregation) 功能，允许对文档进行分析和统计，如计数、求和、最大值等。</div>
          </div>
          <div class="card-source">来源: 6. 查询 (Query) 和聚合 (Aggregation)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心技术</div>
          <div class="card-question">Elasticsearch 能够实现快速搜索的核心数据结构是什么？请简述其工作原理。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Elasticsearch 基于反向索引 (Inverted Index) 实现快速搜索。反向索引将文档内容转化为词项（term）以及这些词项在文档中的位置信息，从而极大提升查询效率。</div>
          </div>
          <div class="card-source">来源: 8. 反向索引 (Inverted Index)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Elasticsearch 集群中的节点是如何进行管理和成员发现的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">节点之间通过 Zen Discovery 机制进行集群管理和成员发现。该机制还负责选举主节点并协调集群状态的更新。</div>
          </div>
          <div class="card-source">来源: 9. 节点通信与协调</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">如果需要扩展 Elasticsearch 的原生功能，可以采用什么方式？请举例说明。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以通过其插件 (Plugins) 架构来扩展功能。常用的插件包括自定义分析器、监控工具、备份解决方案等。</div>
          </div>
          <div class="card-source">来源: 10. 插件 (Plugins)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">“集群状态 (Cluster State)”在 Elasticsearch 中扮演什么角色？它包含了哪些信息？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">集群状态是集群的元数据，它描述了节点、索引、分片等信息。它在节点间共享，用于整个集群的协调和管理。</div>
          </div>
          <div class="card-source">来源: 7. 集群状态 (Cluster State)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">Elasticsearch 是基于哪个开源项目构建的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Elasticsearch (ES) 是一个基于 Lucene 的分布式搜索和分析引擎。</div>
          </div>
          <div class="card-source">来源: 文档开篇第一句</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">主分片 (primary shard) 和副本分片 (replica shard) 在处理操作时有何核心区别？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主分片主要负责处理写入操作，而副本分片主要用于提供高可用性（作为数据备份）和负载均衡（处理读请求）。</div>
          </div>
          <div class="card-source">来源: 3. 分片 (Shard)</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
